Autogenerated HTML docs for v1.8.1-rc2-5-g252f9 
diff --git a/technical/api-run-command.html b/technical/api-run-command.html index 18085c0..137f4bd 100644 --- a/technical/api-run-command.html +++ b/technical/api-run-command.html 
@@ -2,15 +2,25 @@  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">   <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">   <head>  -<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  -<meta name="generator" content="AsciiDoc 8.5.2" />  +<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />  +<meta name="generator" content="AsciiDoc 8.6.8" />   <title>run-command API</title>   <style type="text/css">  -/* Debug borders */  -p, li, dt, dd, div, pre, h1, h2, h3, h4, h5, h6 {  -/*  - border: 1px solid red;  -*/  +/* Shared CSS for AsciiDoc xhtml11 and html5 backends */  +  +/* Default font. */  +body {  + font-family: Georgia,serif;  +}  +  +/* Title font. */  +h1, h2, h3, h4, h5, h6,  +div.title, caption.title,  +thead, p.table.header,  +#toctitle,  +#author, #revnumber, #revdate, #revremark,  +#footer {  + font-family: Arial,Helvetica,sans-serif;   }     body {  @@ -35,13 +45,8 @@  color: #083194;   }    -tt {  - color: navy;  -}  -   h1, h2, h3, h4, h5, h6 {   color: #527bbd;  - font-family: sans-serif;   margin-top: 1.2em;   margin-bottom: 0.5em;   line-height: 1.3;  @@ -59,9 +64,11 @@  h3 + * {   clear: left;   }  +h5 {  + font-size: 1.0em;  +}     div.sectionbody {  - font-family: serif;   margin-left: 0;   }    @@ -77,45 +84,48 @@  ul, ol, li > p {   margin-top: 0;   }  +ul > li { color: #aaa; }  +ul > li > * { color: black; }    -pre {  +.monospaced, code, pre {  + font-family: "Courier New", Courier, monospace;  + font-size: inherit;  + color: navy;   padding: 0;   margin: 0;   }    -span#author {  +  +#author {   color: #527bbd;  - font-family: sans-serif;   font-weight: bold;   font-size: 1.1em;   }  -span#email {  +#email {   }  -span#revnumber, span#revdate, span#revremark {  - font-family: sans-serif;  +#revnumber, #revdate, #revremark {   }    -div#footer {  - font-family: sans-serif;  +#footer {   font-size: small;   border-top: 2px solid silver;   padding-top: 0.5em;   margin-top: 4.0em;   }  -div#footer-text {  +#footer-text {   float: left;   padding-bottom: 0.5em;   }  -div#footer-badges {  +#footer-badges {   float: right;   padding-bottom: 0.5em;   }    -div#preamble {  +#preamble {   margin-top: 1.5em;   margin-bottom: 1.5em;   }  -div.tableblock, div.imageblock, div.exampleblock, div.verseblock,  +div.imageblock, div.exampleblock, div.verseblock,   div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock,   div.admonitionblock {   margin-top: 1.0em;  @@ -135,7 +145,6 @@  /* Block element titles. */   div.title, caption.title {   color: #527bbd;  - font-family: sans-serif;   font-weight: bold;   text-align: left;   margin-top: 1.0em;  @@ -157,13 +166,15 @@    div.sidebarblock > div.content {   background: #ffffee;  - border: 1px solid silver;  + border: 1px solid #dddddd;  + border-left: 4px solid #f0f0f0;   padding: 0.5em;   }     div.listingblock > div.content {  - border: 1px solid silver;  - background: #f4f4f4;  + border: 1px solid #dddddd;  + border-left: 5px solid #f0f0f0;  + background: #f8f8f8;   padding: 0.5em;   }    @@ -171,8 +182,8 @@  padding-left: 1.0em;   margin-left: 1.0em;   margin-right: 10%;  - border-left: 5px solid #dddddd;  - color: #777777;  + border-left: 5px solid #f0f0f0;  + color: #888;   }     div.quoteblock > div.attribution {  @@ -180,8 +191,9 @@  text-align: right;   }    -div.verseblock > div.content {  - white-space: pre;  +div.verseblock > pre.content {  + font-family: inherit;  + font-size: inherit;   }   div.verseblock > div.attribution {   padding-top: 0.75em;  @@ -254,35 +266,12 @@  margin-bottom: 0.1em;   }    -div.tableblock > table {  - border: 3px solid #527bbd;  -}  -thead, p.table.header {  - font-family: sans-serif;  - font-weight: bold;  -}   tfoot {   font-weight: bold;   }   td > div.verse {   white-space: pre;   }  -p.table {  - margin-top: 0;  -}  -/* Because the table frame attribute is overriden by CSS in most browsers. */  -div.tableblock > table[frame="void"] {  - border-style: none;  -}  -div.tableblock > table[frame="hsides"] {  - border-left-style: none;  - border-right-style: none;  -}  -div.tableblock > table[frame="vsides"] {  - border-top-style: none;  - border-bottom-style: none;  -}  -     div.hdlist {   margin-top: 0.8em;  @@ -339,25 +328,32 @@  min-width: 100px;   }    -  -@media print {  - div#footer-badges { display: none; }  +div.colist td {  + padding-right: 0.5em;  + padding-bottom: 0.3em;  + vertical-align: top;  +}  +div.colist td img {  + margin-top: 0.3em;   }    -div#toc {  +@media print {  + #footer-badges { display: none; }  +}  +  +#toc {   margin-bottom: 2.5em;   }    -div#toctitle {  +#toctitle {   color: #527bbd;  - font-family: sans-serif;   font-size: 1.1em;   font-weight: bold;   margin-top: 1.0em;   margin-bottom: 0.1em;   }    -div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {  +div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 {   margin-top: 0;   margin-bottom: 0;   }  @@ -373,51 +369,173 @@  margin-left: 6em;   font-size: 0.9em;   }  -/* Workarounds for IE6's broken and incomplete CSS2. */    -div.sidebar-content {  - background: #ffffee;  - border: 1px solid silver;  - padding: 0.5em;  +span.aqua { color: aqua; }  +span.black { color: black; }  +span.blue { color: blue; }  +span.fuchsia { color: fuchsia; }  +span.gray { color: gray; }  +span.green { color: green; }  +span.lime { color: lime; }  +span.maroon { color: maroon; }  +span.navy { color: navy; }  +span.olive { color: olive; }  +span.purple { color: purple; }  +span.red { color: red; }  +span.silver { color: silver; }  +span.teal { color: teal; }  +span.white { color: white; }  +span.yellow { color: yellow; }  +  +span.aqua-background { background: aqua; }  +span.black-background { background: black; }  +span.blue-background { background: blue; }  +span.fuchsia-background { background: fuchsia; }  +span.gray-background { background: gray; }  +span.green-background { background: green; }  +span.lime-background { background: lime; }  +span.maroon-background { background: maroon; }  +span.navy-background { background: navy; }  +span.olive-background { background: olive; }  +span.purple-background { background: purple; }  +span.red-background { background: red; }  +span.silver-background { background: silver; }  +span.teal-background { background: teal; }  +span.white-background { background: white; }  +span.yellow-background { background: yellow; }  +  +span.big { font-size: 2em; }  +span.small { font-size: 0.6em; }  +  +span.underline { text-decoration: underline; }  +span.overline { text-decoration: overline; }  +span.line-through { text-decoration: line-through; }  +  +div.unbreakable { page-break-inside: avoid; }  +  +  +/*  + * xhtml11 specific  + *  + * */  +  +div.tableblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;   }  -div.sidebar-title, div.image-title {  - color: #527bbd;  - font-family: sans-serif;  +div.tableblock > table {  + border: 3px solid #527bbd;  +}  +thead, p.table.header {   font-weight: bold;  - margin-top: 0.0em;  - margin-bottom: 0.5em;  + color: #527bbd;  +}  +p.table {  + margin-top: 0;  +}  +/* Because the table frame attribute is overriden by CSS in most browsers. */  +div.tableblock > table[frame="void"] {  + border-style: none;  +}  +div.tableblock > table[frame="hsides"] {  + border-left-style: none;  + border-right-style: none;  +}  +div.tableblock > table[frame="vsides"] {  + border-top-style: none;  + border-bottom-style: none;   }    -div.listingblock div.content {  - border: 1px solid silver;  - background: #f4f4f4;  - padding: 0.5em;  +  +/*  + * html5 specific  + *  + * */  +  +table.tableblock {  + margin-top: 1.0em;  + margin-bottom: 1.5em;  +}  +thead, p.tableblock.header {  + font-weight: bold;  + color: #527bbd;  +}  +p.tableblock {  + margin-top: 0;  +}  +table.tableblock {  + border-width: 3px;  + border-spacing: 0px;  + border-style: solid;  + border-color: #527bbd;  + border-collapse: collapse;  +}  +th.tableblock, td.tableblock {  + border-width: 1px;  + padding: 4px;  + border-style: solid;  + border-color: #527bbd;   }    -div.quoteblock-attribution {  - padding-top: 0.5em;  +table.tableblock.frame-topbot {  + border-left-style: hidden;  + border-right-style: hidden;  +}  +table.tableblock.frame-sides {  + border-top-style: hidden;  + border-bottom-style: hidden;  +}  +table.tableblock.frame-none {  + border-style: hidden;  +}  +  +th.tableblock.halign-left, td.tableblock.halign-left {  + text-align: left;  +}  +th.tableblock.halign-center, td.tableblock.halign-center {  + text-align: center;  +}  +th.tableblock.halign-right, td.tableblock.halign-right {   text-align: right;   }    -div.verseblock-content {  - white-space: pre;  +th.tableblock.valign-top, td.tableblock.valign-top {  + vertical-align: top;   }  -div.verseblock-attribution {  - padding-top: 0.75em;  - text-align: left;  +th.tableblock.valign-middle, td.tableblock.valign-middle {  + vertical-align: middle;  +}  +th.tableblock.valign-bottom, td.tableblock.valign-bottom {  + vertical-align: bottom;   }    -div.exampleblock-content {  - border-left: 3px solid #dddddd;  - padding-left: 0.5em;  +  +/*  + * manpage specific  + *  + * */  +  +body.manpage h1 {  + padding-top: 0.5em;  + padding-bottom: 0.5em;  + border-top: 2px solid silver;  + border-bottom: 2px solid silver;  +}  +body.manpage h2 {  + border-style: none;  +}  +body.manpage div.sectionbody {  + margin-left: 3em;   }    -/* IE6 sets dynamically generated links as visited. */  -div#toc a:visited { color: blue; }  +@media print {  + body.manpage div#toc { display: none; }  +}  +  +   </style>   <script type="text/javascript">   /*<![CDATA[*/  -window.onload = function(){asciidoc.footnotes();}   var asciidoc = { // Namespace.     /////////////////////////////////////////////////////////////////////  @@ -459,7 +577,7 @@    function tocEntries(el, toclevels) {   var result = new Array;  - var re = new RegExp('[hH]([2-'+(toclevels+1)+'])');  + var re = new RegExp('[hH]([1-'+(toclevels+1)+'])');   // Function that scans the DOM tree for header elements (the DOM2   // nodeIterator API would be a better technique but not supported by all   // browsers).  @@ -479,6 +597,25 @@  }     var toc = document.getElementById("toc");  + if (!toc) {  + return;  + }  +  + // Delete existing TOC entries in case we're reloading the TOC.  + var tocEntriesToRemove = [];  + var i;  + for (i = 0; i < toc.childNodes.length; i++) {  + var entry = toc.childNodes[i];  + if (entry.nodeName.toLowerCase() == 'div'  + && entry.getAttribute("class")  + && entry.getAttribute("class").match(/^toclevel/))  + tocEntriesToRemove.push(entry);  + }  + for (i = 0; i < tocEntriesToRemove.length; i++) {  + toc.removeChild(tocEntriesToRemove[i]);  + }  +  + // Rebuild TOC entries.   var entries = tocEntries(document.getElementById("content"), toclevels);   for (var i = 0; i < entries.length; ++i) {   var entry = entries[i];  @@ -506,24 +643,44 @@  */     footnotes: function () {  - var cont = document.getElementById("content");  + // Delete existing footnote entries in case we're reloading the footnodes.  + var i;   var noteholder = document.getElementById("footnotes");  + if (!noteholder) {  + return;  + }  + var entriesToRemove = [];  + for (i = 0; i < noteholder.childNodes.length; i++) {  + var entry = noteholder.childNodes[i];  + if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") == "footnote")  + entriesToRemove.push(entry);  + }  + for (i = 0; i < entriesToRemove.length; i++) {  + noteholder.removeChild(entriesToRemove[i]);  + }  +  + // Rebuild footnote entries.  + var cont = document.getElementById("content");   var spans = cont.getElementsByTagName("span");   var refs = {};   var n = 0;   for (i=0; i<spans.length; i++) {   if (spans[i].className == "footnote") {   n++;  - // Use [\s\S] in place of . so multi-line matches work.  - // Because JavaScript has no s (dotall) regex flag.  - note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];  + var note = spans[i].getAttribute("data-note");  + if (!note) {  + // Use [\s\S] in place of . so multi-line matches work.  + // Because JavaScript has no s (dotall) regex flag.  + note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1];  + spans[i].innerHTML =  + "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +  + "' title='View footnote' class='footnote'>" + n + "</a>]";  + spans[i].setAttribute("data-note", note);  + }   noteholder.innerHTML +=   "<div class='footnote' id='_footnote_" + n + "'>" +   "<a href='#_footnoteref_" + n + "' title='Return to text'>" +   n + "</a>. " + note + "</div>";  - spans[i].innerHTML =  - "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n +  - "' title='View footnote' class='footnote'>" + n + "</a>]";   var id =spans[i].getAttribute("id");   if (id != null) refs["#"+id] = n;   }  @@ -543,13 +700,36 @@  }   }   }  +},  +  +install: function(toclevels) {  + var timerId;  +  + function reinstall() {  + asciidoc.footnotes();  + if (toclevels) {  + asciidoc.toc(toclevels);  + }  + }  +  + function reinstallAndRemoveTimer() {  + clearInterval(timerId);  + reinstall();  + }  +  + timerId = setInterval(reinstall, 500);  + if (document.addEventListener)  + document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false);  + else  + window.onload = reinstallAndRemoveTimer;   }     }  +asciidoc.install();   /*]]>*/   </script>   </head>  -<body>  +<body class="article">   <div id="header">   <h1>run-command API</h1>   </div>  @@ -564,21 +744,22 @@  produces in the caller in order to process it.</p></div>   </div>   </div>  +<div class="sect1">   <h2 id="_functions">Functions</h2>   <div class="sectionbody">   <div class="dlist"><dl>   <dt class="hdlist1">  -<tt>start_command</tt>  +<code>start_command</code>   </dt>   <dd>   <p>  - Start a sub-process. Takes a pointer to a <tt>struct child_process</tt>  + Start a sub-process. Takes a pointer to a <code>struct child_process</code>   that specifies the details and returns pipe FDs (if requested).   See below for details.   </p>   </dd>   <dt class="hdlist1">  -<tt>finish_command</tt>  +<code>finish_command</code>   </dt>   <dd>   <p>  @@ -587,27 +768,27 @@  </p>   </dd>   <dt class="hdlist1">  -<tt>run_command</tt>  +<code>run_command</code>   </dt>   <dd>   <p>   A convenience function that encapsulates a sequence of   start_command() followed by finish_command(). Takes a pointer  - to a <tt>struct child_process</tt> that specifies the details.  + to a <code>struct child_process</code> that specifies the details.   </p>   </dd>   <dt class="hdlist1">  -<tt>run_command_v_opt</tt>, <tt>run_command_v_opt_cd_env</tt>  +<code>run_command_v_opt</code>, <code>run_command_v_opt_cd_env</code>   </dt>   <dd>   <p>   Convenience functions that encapsulate a sequence of   start_command() followed by finish_command(). The argument argv   specifies the program and its arguments. The argument opt is zero  - or more of the flags <tt>RUN_COMMAND_NO_STDIN</tt>, <tt>RUN_GIT_CMD</tt>,  - <tt>RUN_COMMAND_STDOUT_TO_STDERR</tt>, or <tt>RUN_SILENT_EXEC_FAILURE</tt>  + or more of the flags <code>RUN_COMMAND_NO_STDIN</code>, <code>RUN_GIT_CMD</code>,  + <code>RUN_COMMAND_STDOUT_TO_STDERR</code>, or <code>RUN_SILENT_EXEC_FAILURE</code>   that correspond to the members .no_stdin, .git_cmd,  - .stdout_to_stderr, .silent_exec_failure of <tt>struct child_process</tt>.  + .stdout_to_stderr, .silent_exec_failure of <code>struct child_process</code>.   The argument dir corresponds the member .dir. The argument env   corresponds to the member .env.   </p>  @@ -644,17 +825,17 @@  </p>   <div class="dlist"><dl>   <dt class="hdlist1">  -<tt>start_async</tt>  +<code>start_async</code>   </dt>   <dd>   <p>  - Run a function asynchronously. Takes a pointer to a <tt>struct  - async</tt> that specifies the details and returns a set of pipe FDs  + Run a function asynchronously. Takes a pointer to a <code>struct  + async</code> that specifies the details and returns a set of pipe FDs   for communication with the function. See below for details.   </p>   </dd>   <dt class="hdlist1">  -<tt>finish_async</tt>  +<code>finish_async</code>   </dt>   <dd>   <p>  @@ -663,7 +844,7 @@  </p>   </dd>   <dt class="hdlist1">  -<tt>run_hook</tt>  +<code>run_hook</code>   </dt>   <dd>   <p>  @@ -685,12 +866,14 @@  </li>   </ol></div>   </div>  +</div>  +<div class="sect1">   <h2 id="_data_structures">Data structures</h2>   <div class="sectionbody">   <div class="ulist"><ul>   <li>   <p>  -<tt>struct child_process</tt>  +<code>struct child_process</code>   </p>   </li>   </ul></div>  @@ -751,19 +934,19 @@  </p>   <div class="literalblock">   <div class="content">  -<pre><tt>.in: Returns the writable pipe end into which the caller writes;  - the readable end of the pipe becomes the child's stdin.</tt></pre>  +<pre><code>.in: Returns the writable pipe end into which the caller writes;  + the readable end of the pipe becomes the child's stdin.</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><tt>.out, .err: Returns the readable pipe end from which the caller  +<pre><code>.out, .err: Returns the readable pipe end from which the caller   reads; the writable end of the pipe end becomes child's  - stdout/stderr.</tt></pre>  + stdout/stderr.</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><tt>The caller of start_command() must close the so returned FDs  -after it has completed reading from/writing to it!</tt></pre>  +<pre><code>The caller of start_command() must close the so returned FDs  +after it has completed reading from/writing to it!</code></pre>   </div></div>   </li>   <li>  @@ -772,14 +955,14 @@  </p>   <div class="literalblock">   <div class="content">  -<pre><tt>.in: The FD must be readable; it becomes child's stdin.  +<pre><code>.in: The FD must be readable; it becomes child's stdin.   .out: The FD must be writable; it becomes child's stdout.  -.err: The FD must be writable; it becomes child's stderr.</tt></pre>  +.err: The FD must be writable; it becomes child's stderr.</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><tt>The specified FD is closed by start_command(), even if it fails to  -run the sub-process!</tt></pre>  +<pre><code>The specified FD is closed by start_command(), even if it fails to  +run the sub-process!</code></pre>   </div></div>   </li>   <li>  @@ -789,15 +972,15 @@  </p>   <div class="literalblock">   <div class="content">  -<pre><tt>.no_stdin, .no_stdout, .no_stderr: The respective channel is  - redirected to /dev/null.</tt></pre>  +<pre><code>.no_stdin, .no_stdout, .no_stderr: The respective channel is  + redirected to /dev/null.</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><tt>.stdout_to_stderr: stdout of the child is redirected to its  +<pre><code>.stdout_to_stderr: stdout of the child is redirected to its   stderr. This happens after stderr is itself redirected.   So stdout will follow stderr to wherever it is  - redirected.</tt></pre>  + redirected.</code></pre>   </div></div>   </li>   </ol></div>  @@ -826,7 +1009,7 @@  <div class="ulist"><ul>   <li>   <p>  -<tt>struct async</tt>  +<code>struct async</code>   </p>   </li>   </ul></div>  @@ -882,20 +1065,20 @@  </p>   <div class="literalblock">   <div class="content">  -<pre><tt>.in: Returns the writable pipe end into which the caller  +<pre><code>.in: Returns the writable pipe end into which the caller   writes; the readable end of the pipe becomes the function's  -in argument.</tt></pre>  +in argument.</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><tt>.out: Returns the readable pipe end from which the caller  +<pre><code>.out: Returns the readable pipe end from which the caller   reads; the writable end of the pipe becomes the function's  -out argument.</tt></pre>  +out argument.</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><tt>The caller of start_async() must close the returned FDs after it  -has completed reading from/writing from them.</tt></pre>  +<pre><code>The caller of start_async() must close the returned FDs after it  +has completed reading from/writing from them.</code></pre>   </div></div>   </li>   <li>  @@ -904,20 +1087,20 @@  </p>   <div class="literalblock">   <div class="content">  -<pre><tt>.in: The FD must be readable; it becomes the function's in.  -.out: The FD must be writable; it becomes the function's out.</tt></pre>  +<pre><code>.in: The FD must be readable; it becomes the function's in.  +.out: The FD must be writable; it becomes the function's out.</code></pre>   </div></div>   <div class="literalblock">   <div class="content">  -<pre><tt>The specified FD is closed by start_async(), even if it fails to  -run the function.</tt></pre>  +<pre><code>The specified FD is closed by start_async(), even if it fails to  +run the function.</code></pre>   </div></div>   </li>   </ol></div>   <div class="paragraph"><p>The function pointer in .proc has the following signature:</p></div>   <div class="literalblock">   <div class="content">  -<pre><tt>int proc(int in, int out, void *data);</tt></pre>  +<pre><code>int proc(int in, int out, void *data);</code></pre>   </div></div>   <div class="olist arabic"><ol class="arabic">   <li>  @@ -964,10 +1147,11 @@  </ol></div>   </div>   </div>  +</div>   <div id="footnotes"><hr /></div>   <div id="footer">   <div id="footer-text">  -Last updated 2011-11-15 13:45:02 PDT  +Last updated 2011-11-15 13:45:02 PST   </div>   </div>   </body>